package initialize

import (
	"context"
	"fmt"
	"github.com/flipped-aurora/gin-vue-admin/server/service/matchs"
	"github.com/flipped-aurora/gin-vue-admin/server/task"
	"go.uber.org/zap"

	"github.com/robfig/cron/v3"

	"github.com/flipped-aurora/gin-vue-admin/server/global"
)

func Timer() {
	go func() {
		var option []cron.Option
		option = append(option, cron.WithSeconds())
		// 清理DB定时任务
		_, err := global.GVA_Timer.AddTaskByFunc("ClearDB", "@daily", func() {
			err := task.ClearTable(global.GVA_DB) // 定时任务方法定在task文件包中
			if err != nil {
				fmt.Println("timer error:", err)
			}
		}, "定时清理数据库【日志，黑名单】内容", option...)
		if err != nil {
			fmt.Println("add timer error:", err)
		}

		// 问问匹配定时任务 - 每小时执行一次补推
		_, err = global.GVA_Timer.AddTaskByFunc("AskMatchTask", "0 0 * * * *", func() {
			task := matchs.NewAskMatchTask()
			if err := task.Execute(context.Background()); err != nil {
				global.GVA_LOG.Error("问问匹配定时任务执行失败", zap.Error(err))
			}
		}, "问问匹配定时补推任务", option...)
		if err != nil {
			global.GVA_LOG.Error("添加问问匹配定时任务失败", zap.Error(err))
		}

		// 其他定时任务定在这里 参考上方使用方法
		//_, err := global.GVA_Timer.AddTaskByFunc("定时任务标识", "corn表达式", func() {
		//	具体执行内容...
		//  ......
		//}, option...)
		//if err != nil {
		//	fmt.Println("add timer error:", err)
		//}
	}()
}
